
import 'package:flutter/material.dart';
import 'package:flutter_deer/account/page/agent_user_betting_person_list_page.dart';
import 'package:flutter_deer/account/provider/agent_user_betting_person_page_provider.dart';
import 'package:flutter_deer/res/resources.dart';
import 'package:flutter_deer/util/other_utils.dart';
import 'package:flutter_deer/util/theme_utils.dart';
import 'package:flutter_deer/widgets/my_app_bar.dart';
import 'package:flutter_gen/gen_l10n/deer_localizations.dart';
import 'package:provider/provider.dart';


class AgentUserBettingPersonPage extends StatefulWidget {

  final String? username;
  final String? accountId;
  const AgentUserBettingPersonPage({super.key,required this.username,required this.accountId});

  @override
  _AgentUserBettingPersonPageState createState() => _AgentUserBettingPersonPageState();
}

class _AgentUserBettingPersonPageState extends State<AgentUserBettingPersonPage> with SingleTickerProviderStateMixin, AutomaticKeepAliveClientMixin {

  TabController? _tabController;
  final PageController _pageController = PageController();
  AgentUserBettingPersonPageProvider provider = AgentUserBettingPersonPageProvider();
  final GlobalKey _bodyKey = GlobalKey();

  List<AgentUserBettingPersonListPage> pages = [];

  @override
  void initState() {
    super.initState();
    pages = [AgentUserBettingPersonListPage(status: '0',username: widget.username,),AgentUserBettingPersonListPage(status: '1',username: widget.username,),AgentUserBettingPersonListPage(status: '2',username: widget.username,)];
    _tabController = TabController(vsync: this, length: 3);
  }

  @override
  void dispose() {
    _tabController?.dispose();
    super.dispose();
  }

  @override
  // ignore: must_call_super
  void didChangeDependencies() {
    super.didChangeDependencies();
  }

  @override
  Widget build(BuildContext context) {
    super.build(context);
    final Color? iconColor = ThemeUtils.getIconColor(context);
    double textWidth = 0;
    List<String> titles = [DeerLocalizations.of(context)!.waitLottery.nullSafe,DeerLocalizations.of(context)!.winLottery.nullSafe,DeerLocalizations.of(context)!.lossLottery.nullSafe];
    for(int i=0;i<titles.length;i++){
      TextPainter textPainter = TextPainter(
        text: TextSpan(
          text: titles.elementAt(i),
        ),
        textDirection: TextDirection.ltr,
      );
      textPainter.layout();
      if(textWidth<textPainter.size.width){
        textWidth = textPainter.size.width;
      }
    }
    return ChangeNotifierProvider<AgentUserBettingPersonPageProvider>(
        create: (_) => provider,
        child: Scaffold(
            appBar: MyAppBar(centerTitle: '${widget.accountId.nullSafe}${DeerLocalizations.of(context)!.bettingRecord.nullSafe}',),
            body: Column(
                key: _bodyKey,
                crossAxisAlignment: CrossAxisAlignment.center,
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: <Widget>[
                  Container(
                    // 隐藏点击效果
                    padding: EdgeInsets.only(left: 0.0,right: 0.0),
                    color: context.backgroundColor,
                    child: TabBar(
                      onTap: (index) {
                        if (!mounted) {
                          return;
                        }
                        _pageController.jumpToPage(index);
                      },
                      isScrollable: true,
                      controller: _tabController,
                      labelStyle: TextStyles.textBold18,
                      indicatorSize: TabBarIndicatorSize.label,
                      labelPadding: EdgeInsets.zero,
                      unselectedLabelColor: context.isDark ? Colours.text_gray : Colours.text,
                      labelColor: Theme.of(context).primaryColor,
                      indicatorPadding: const EdgeInsets.only(right: 18,left: 18),
                      tabs: <Widget>[
                        _TabView('${DeerLocalizations.of(context)!.waitLottery.nullSafe}', 0,textWidth),
                        _TabView('${DeerLocalizations.of(context)!.winLottery.nullSafe}', 1,textWidth),
                        _TabView('${DeerLocalizations.of(context)!.lossLottery.nullSafe}', 2,textWidth)
                      ],
                    ),
                  ),
                  Gaps.line,
                  Expanded(
                      child: PageView.builder(
                          key: Key('pageView'),
                          itemCount: 3,
                          onPageChanged: _onPageChange,
                          controller: _pageController,
                          itemBuilder: (_, int index) => this.pages.elementAt(index)
                      )
                  )
                ]
            )
        )
    );
  }

  void _onPageChange(int index) {
    if (!mounted) {
      return;
    }
    provider.setIndex(index);
    _tabController?.animateTo(index);
    _pageController.jumpToPage(index);
  }

  @override
  bool get wantKeepAlive => false;

}

class _TabView extends StatelessWidget {

  const _TabView(this.tabName, this.index,this.maxLabelWidth);

  final String tabName;
  final int index;
  final double maxLabelWidth;

  @override
  Widget build(BuildContext context) {
    if(maxLabelWidth>MediaQuery.of(context).size.width/3-66) {
      return Tab(
          child: Padding(padding: EdgeInsets.only(left: 10, right: 10),
            child: Text(tabName),
          )
      );
    }else{
      return Tab(
        child: SizedBox(
          width: MediaQuery.of(context).size.width/3-36,
          child: Row(
            crossAxisAlignment: CrossAxisAlignment.center,
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(tabName)
            ],
          ),
        ),
      );
    }
  }
}
